--1.创建 银行数据库 Bank
--2.创建 账号信息表 AccountInfo
create database Bank;

use Bank;

create table AccountInfo(
	 AccountId	int identity(1,1) not null,
	 AcoountCode varchar(20) not null,
	 AcoountPhone varchar(20),
	 RealName varchar(20) not null,
);
go

select *from AccountInfo;

--3.创建 银行卡表 BankCard

create table BankCard(
	CardNo varchar(30) primary key,
	AccountId int not null,
	CardPwd varchar(30) not null,
	CardBalance money not null,
	CardState tinyint not null,
	CardTime varchar(30) not null,
);
go

select * from BankCard;

--4.创建 交易信息表 CardExchange

create table CardExchange(
	ExchangeId int primary key identity(1,1),
	CardNo varchar(30) not null,
	MoneyInBank money not null, 
	MoneyOutBank money not null,
	ExchangeTime smalldatetime not null,
);
go

select * from CardExchange;

--5.给 账号信息表 AccountInfo 增加字段：
alter table AccountInfo add OpenTime smalldatetime not null;

--6.给 银行卡表 BankCard 修改字段：
alter table BankCard alter column CardTime smalldatetime not null;
alter table BankCard add constraint DF_BankCard_CardTime default getdate() for CardTime;


--7.AccountInfo.AccountId 设置为主键。
alter table AccountInfo add constraint PK_AccountInfo_AccountId	primary key(AccountId);

--8.AccountInfo.AccountCode 设置为唯一。
alter table AccountInfo add constraint UNQ_AccountInfo_AccountCode unique(AccountCode);

--9.AccountInfo.OpenTime 默认值设置为getdate()。
alter table AccountInfo  alter column OpenTime smalldatetime not null;
alter table AccountInfo add constraint DF_AccountInfo_OpentTime default getdate() for OpenTime;


--10.AccountInfo.AccountPhone 设置为非空。
alter table AccountInfo alter column AccountPhone varchar(20) not null;

--11.BankCard.CardBalance 默认值设置为0.00。
alter table BankCard add constraint DF_BankCard_CardBalanve default(0.00)  for CardBalance; 

--12.BankCard.CardState 默认值设置为1。
alter table BankCard add constraint DF_BankCard_CardState default(1) for CardState;

--13.BankCard.AccountId 设置为 AccountInfo.AccountId 的外键。
alter table BankCard add constraint CK_BankCard_AccountId foreign key (AccountId)references BankCard(AccountId);

--14.CardExchange.CardNo 设置为 BankCard.CardNo 的外键。
alter table CardExcahnge add constraint CK_CardExchange_CardNo foreign key (CardNo)references BankCard(CardNo);

--15.CardExchange.MoneyInBank 设置要大于等于0。
alter table CardExchange add constraint CK_CardExcahnge_MoneyInBank check(MoneyInBank>=0);

--16.CardExchange.MoneyOutBank 设置要大于等于0。
alter table CardExchange add constraint CK_CardExchange_MoneyOutBank check(MoneyOutBank>=0);


